package com.example.config;

import com.example.exception.SelfRuntimeException;
import com.example.enums.ErrorCode;
import com.example.model.response.RestResponse;
import com.example.model.response.RestResponseEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理，捕获所有Controller中抛出的异常。
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

/*
 * 1.Spring 在选择 @ExceptionHandler 时会优先使用“最具体”的异常类型。
 * 2.如果没有专门针对 SystemException 的处理器，
 * 自然会落到 Exception.class 的处理器上，导致“都被当成系统异常”。
 */


    /**
     * 处理自定义异常
     */
    @ExceptionHandler(SelfRuntimeException.class)
    public RestResponse<String> selfRuntimeExceptionHandler(SelfRuntimeException e) {
        log.error("业务异常 - code：{}, msg：{}", e.getCode().getCode(), e.getMessage());
        return RestResponseEntity.newFailResponse(e.getCode(), e.getMessage());
    }

    /**
     * 其他未处理的异常，按系统异常处理
     */
    @ExceptionHandler(Exception.class)
    public RestResponse<String> exceptionHandler(Exception e) {
        log.error("系统异常", e);
        return RestResponseEntity.newFailResponse(ErrorCode.SYSTEM_ERROR, e.getMessage());
    }
}
